1.javascript引用类型有哪些?非引用类型有哪些?
引用类型:对象、数组、函数、正则表达式,指保存在堆内存中的对象,变量中保存的实际上是一个指针,这个指针指向内存中的另一个位置,由该位置保存对象。
非引用类型: 数值、布尔、字符串、null、undefined,这些是基本类型,指的事保存在栈内存中的简单数据段。
2.如下代码输出什么?为什么?
1 | var obj1 = {a:1, b:2}; |
3.如下代码输出什么?为什么?
1 | var a = 1 |
4.如下代码输出什么? 为什么?
1 | var a = 1 |
5.过滤如下数组,只保留正数,直接在原数组上操作
1 | var arr = [3,1,0,-1,-3,2,-5] |
6.过滤如下数组,只保留正数,原数组不变,生成新数组
1 | var arr = [3,1,0,-1,-3,2,-5] |
7.写一个深拷贝函数,用两种方式实现
深拷贝:在对含有指针成员的对象进行拷贝时,必须要自己定义拷贝构造函数,使拷贝后的对象指针成员有自己的内存空间,即进行深拷贝
方法1:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25var obj={
name:'fang',
friend:{
name:'haha',
age:18,
sex:'female'
}
}
function copy(obj){
var newObj={}
for(var key in obj){
if(obj.hasOwnProperty(key)){
if(typeof obj[key]==='number'||typeof obj[key]==='boolean'||typeof obj[key]==='string'||obj[key]===undefined
||obj[key]===null){
newObj[key]=obj[key]
}else{
newObj[key]=copy(obj[key])
}
}
}
return newObj
}
var obj2= copy(obj)
console.log(obj2)方法2:
1
2
3
4
5
6
7function copy(obj){
var newObj=JSON.parse(JSON.stringify(obj))// JSON.stringify(obj)把对象转化为字符串,
JSON.parse(JSON.stringify(obj))把字符串重新生成一个对象
return newObj
}
var obj2= copy(obj)
console.log(obj2)